﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using BackEndSystemWebTv.Enums;

namespace BackEndSystemWebTv
{
    public partial class Autorisatie
    {
        private Gebruiker gebruiker;
        private Log log;

        public Autorisatie()
        {
        }

        /// <summary>
        /// Voegt een autorisatie toe bij een specifieke gebruiker
        /// </summary>
        /// <param name="gebruikersnaam"></param>
        /// <param name="autorisatie"></param>
        /// <returns></returns>
        public EAutorisatieToevoegen AutorisatieToevoegen(string gebruikersnaam, string autorisatie)
        {
            if (gebruikersnaam.Equals("Admin"))
                return EAutorisatieToevoegen.Admin;

            gebruiker = Gebruiker.GebruikerOphalen(gebruikersnaam);
            if (gebruiker == null)
                return EAutorisatieToevoegen.GebruikerBestaatNiet;

            if (haalAutorisatieOp(autorisatie, gebruiker.getGebruikerID(gebruikersnaam)) != null)
            {
                return EAutorisatieToevoegen.AutorisatieBestondAl;
            }
            else
            {
                Autorisatie auto = Autorisatie.CreateAutorisatie(0, gebruiker.getGebruikerID(gebruikersnaam));
                auto.SociaalMedium = SociaalMedium.CreateSociaalMedium(0, autorisatie);
                gebruiker.Autorisaties.Add(auto);
                DatabaseEntities.Instance.SaveChanges();

                log = new Log();
                log.LogChatActiviteit(string.Format("Autorisatie {0} toegekend aan gebruiker {1}",
                    auto.SociaalMedium.Sociaalmedium, gebruiker.Gebruikersnaam),
                    gebruiker.Gebruikersnaam, ESocialMedium.Systeem);
                return EAutorisatieToevoegen.Succes;
            }
        }

        /// <summary>
        /// Verwijdert een autorisatie bij een specifieke gebruiker
        /// </summary>
        /// <param name="gebruikersnaam"></param>
        /// <param name="autorisatie"></param>
        /// <returns></returns>
        public EAutorisatieVerwijderen AutorisatieVerwijderen(string gebruikersnaam, string autorisatie)
        {
            if (gebruikersnaam.Equals("Admin"))
                return EAutorisatieVerwijderen.Admin;

            gebruiker = Gebruiker.GebruikerOphalen(gebruikersnaam);
            if (gebruiker == null)
                return EAutorisatieVerwijderen.GebruikerNietGevonden;

            Autorisatie aut = haalAutorisatieOp(autorisatie, gebruiker.getGebruikerID(gebruikersnaam));
            if (aut == null)
                return EAutorisatieVerwijderen.AutorisatieNietGevonden;
            else
            {
                DatabaseEntities.Instance.SociaalMediums.DeleteObject(aut.SociaalMedium);
                DatabaseEntities.Instance.Autorisaties.DeleteObject(aut);
                DatabaseEntities.Instance.SaveChanges();
                log = new Log();
                log.LogChatActiviteit(string.Format("Autorisatie {0} ontkent aan gebruiker {1}",
                    autorisatie, gebruiker.Gebruikersnaam), gebruiker.Gebruikersnaam, ESocialMedium.Systeem);
                return EAutorisatieVerwijderen.Succes;
            }
        }

        /// <summary>
        /// Voegt een specifieke sociaal medium toe aan de gebruiker
        /// </summary>
        public Autorisatie AutorisatieToevoegen(ESocialMedium medium, Gebruiker g)
        {
            SociaalMedium sMedium = new SociaalMedium();
            Autorisatie aut = Autorisatie.CreateAutorisatie(0, g.getGebruikerID(g.Gebruikersnaam));
            aut.Gebruiker = g;
            aut.SociaalMedium = sMedium.MaakSociaalMedium(medium, aut);
            return aut;
        }

        /// <summary>
        /// Haalt een autorisatie op door middel van de sociaal medium naam en de gebruikersID
        /// </summary>
        /// <param name="autorisatie"></param>
        /// <param name="gebruikersID"></param>
        /// <returns></returns>
        private Autorisatie haalAutorisatieOp(string autorisatie, int gebruikersID)
        {
            Autorisatie auto = null;

            var aut =
                from a in DatabaseEntities.Instance.Autorisaties
                where a.SociaalMedium.Sociaalmedium == autorisatie && a.GebruikerGebruikersId == gebruikersID
                select a;

            foreach (var item in aut)
            {
                auto = item;
            }
            return auto;
        }

    }
}